//
// Created by mongobaba on 2021/6/8.
//

#include "unit_test.h"
#include "json_validator.h"

// 特殊情况
TEST(parse_value_empty) {
    json_validator validator("");
    ASSERT_EQ(false, validator.parse_value());
    ASSERT_EQ(std::string(""), validator.left());
}

// 正常情况，空对象
TEST(parse_value_empty_object) {
    json_validator validator("{}x");
    ASSERT_EQ(true, validator.parse_value());
    ASSERT_EQ(std::string("x"), validator.left());
}

// 正常情况，空数组
TEST(parse_value_empty_array) {
    json_validator validator("[]x");
    ASSERT_EQ(true, validator.parse_value());
    ASSERT_EQ(std::string("x"), validator.left());
}

// 正常情况，字符串
TEST(parse_value_string) {
    json_validator validator(R"("hello"x)");
    ASSERT_EQ(true, validator.parse_value());
    ASSERT_EQ(std::string("x"), validator.left());
}

// 正常情况，关键字
TEST(parse_value_keyword) {
    std::string keywords[] = {"true", "false", "null"};
    for (auto& s : keywords) {
        json_validator validator(s + "x");
        ASSERT_EQ(true, validator.parse_value());
        ASSERT_EQ(std::string("x"), validator.left());
    }
}

// 正常情况，数字
TEST(parse_value_number) {
    json_validator validator("3.14x");
    ASSERT_EQ(true, validator.parse_value());
    ASSERT_EQ(std::string("x"), validator.left());
}

// 错误情况
TEST(parse_value_other) {
    json_validator validator("x123");
    ASSERT_EQ(false, validator.parse_value());
    ASSERT_EQ(std::string("x123"), validator.left());
}
